package com.Shuang.Demo4;

import java.util.*;

/*
* **需求**
* 红包雨游戏，某企业有100名员工，员工的工号依次是1, 2，3, 4，..到100。现在公司举办了年会活动，活动中有一个红包雨环节，要求共计发出200个红包雨。其中小红包在[1 - 30]
*  元之间，总占比为80%，大红包[31-100]元，总占比为20%。
 **具体的功能点如下**
1、系统模拟上述要求产生200个红包。
2、模拟100个员工抢红包雨，需要输出哪个员工抢到哪个红包的过程，活动结束时需要提示活动结束。
3、活动结束后，请1对100名员工按照所抢红包的总金额进行降序排序展示，**例如：3号员工抢红包总计：293元、1号员工抢红包总计250元，....**
* */
public class Test {
    public static void main(String[] args) {
        //1 生成100个员工，依次编号为1，2，3...放到集合中
        List<Worker> workers = new ArrayList<>();
        for (int i = 1; i <= 100; i++) {
            Worker worker = new Worker(i);
            workers.add(worker);
        }
        //2 模拟产生上述要求的两百个红包 放到集合中
        Set<HongBao> hongBaos = new HashSet<>();
        // 先产生小红包160个
        Random r = new Random();
        for (int i = 0; i < 160; i++) {
            double smallMoney = r.nextInt(1, 31);
            HongBao hongBao = new HongBao(smallMoney,i + 1);
            hongBaos.add(hongBao);
        }
        //产生大红包40个
        for (int i = 0; i < 40; i++) {
            double bigMoney = r.nextInt(31, 101);
            HongBao hongBao = new HongBao(bigMoney, i + 161);
            hongBaos.add(hongBao);
        }

        //3 模拟100个员工抢红包雨，需要输出哪个员工抢到哪个红包的过程，活动结束时需要提示活动结束。
        for (HongBao hongBao : hongBaos) {
            double money = hongBao.getMoney();
            int index = r.nextInt(0,100);
            Worker worker = workers.get(index);
            if (worker.getMoney() != 0){
                double currentMoney = worker.getMoney();
                worker.setMoney(currentMoney + money);
            }else {
                worker.setMoney(money);
            }
            System.out.println((index+1) + "号员工抢到了" + "第" + hongBao.getNum() + "个红包");
        }
        System.out.println("红包发完啦~活动结束了喔");

        //4 活动结束后，请对100名员工按照所抢红包的总金额进行降序排序展示，**例如：3号员工抢红包总计：293元、1号员工抢红包总计250元，....**
        Collections.sort(workers, (o1, o2) -> {return Double.compare(o2.getMoney(), o1.getMoney());});
        System.out.println("各个员工抢红包总金额从高到低如下：");
        for (Worker worker : workers) {
            System.out.print(worker.getId() + "号员工抢红包总计：" + worker.getMoney() + "元、");
        }
    }



}
